package com.itheima.d04_net_bs.server;

import java.net.ServerSocket;
import java.net.Socket;
import java.util.HashMap;
import java.util.Map;
import java.util.concurrent.*;

/**
 * 目标：创建一个服务器，接收客户端发送的数据并打印在控制台。
 */
public class Server {

    public static void main(String[] args) throws Exception {

        //0.创建一个线程池
        ExecutorService pool = new ThreadPoolExecutor(
                30, //核心线程数
                34, //最大线程数
                10, //线程空闲时间
                TimeUnit.SECONDS, //时间单位
                new ArrayBlockingQueue<>(10), //阻塞队列,
                Executors.defaultThreadFactory(),//线程工厂
                new ThreadPoolExecutor.DiscardOldestPolicy() //线程队列满了，尝试使用队列中老的线程，如果队列中没有老的线程，
        );


        //1.创建ServerSocket对象，注册服务器端端口
        ServerSocket ss = new ServerSocket(10086);

        //2.使用ServerSocket对象的accept方法获取服务器端Socket对象
        System.out.println("服务器已启动，等待客户端连接...");

        while (true) {
            //3.持续的接收不同的客户端连接
            Socket serverScoket = ss.accept(); //阻塞，一直等待客户端连接

            System.out.println("一个客户端连接了...："+serverScoket.getRemoteSocketAddress());

            //4.创建线程对象，和客户端通信
            pool.execute(new ChatRunnable(serverScoket));
        }

    }
}
